package com.tofch.biproject.manager;

import com.tofch.biproject.common.ErrorCode;
import com.tofch.biproject.exception.BusinessException;
import org.redisson.api.RRateLimiter;
import org.redisson.api.RateIntervalUnit;
import org.redisson.api.RateType;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 专供 RedisLimiter 限流服务+
 */

@Service
public class RedisLimiterManager {
    @Resource
    private RedissonClient redissonClient;

    /**
     * 限流操作
     * @param  key 区分不同的限流器，比如不同的用户 id 应该分别统计
     */

     public void doRateLimit(String key){
         // 获取 RateLimiter 对象
         RRateLimiter rateLimiter = redissonClient.getRateLimiter(key);

         // 设置速率为每秒 5 个令牌
         rateLimiter.trySetRate(RateType.OVERALL, 2, 1, RateIntervalUnit.SECONDS);

         boolean canOp = rateLimiter.tryAcquire(1);
         if(!canOp){
             throw new BusinessException(ErrorCode.TOO_MANY_REQURST);
         }

     }



}
